package com.MyBatisPlus.test_1_29_mybatisplus;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Test129MyBatisPlusApplication {

    public static void main(String[] args) {
        SpringApplication.run(Test129MyBatisPlusApplication.class, args);
        // **** MyBatis 操作数据库(进阶) ****
        // 新的增删改查
        // 1) 增 数据插入时, 需求: 根据用户的输入情况, 进行插入
        //              动态 SQL: 根据需求, 动态的拼接 SQL

        // 那么如何实现呢?
        // 其实就是 一个 if 语句
        // 同样的 MyBatis 也是这种 if 语句

        // 注解的方式 在 java.mapper 层 展示

        // 还有一种方式是 xml 的方式
        // 在 resources mapper 层展示

        // 接下来演示完:
        // 总结 什么时候用注解什么时候用xml : 全屏个人喜好
        // 在动态sql语句中呢, xml 更直观更方便
        // 简单sql使用 注解更方便

        // 但是接下来会出现什么样的问题呢?
        // 还是以 xml 方式为例
        // 这时候全部都想改了
        // 这时候运行结果会报错
        // 是因为 逗号 位置错了
        // 不管怎么添加都会有符号错误
        // 所以需要用到 <trim>标签
        // 来去除多余的字符

        // 之前的插⼊⽤⼾功能，只是有⼀个 gender 字段可能是选填项，如果有多个字段，⼀般考虑使⽤标签结
        //合标签，对多个字段都采取动态⽣成的⽅式。
        //标签中有如下属性：
        //• prefix：表⽰整个语句块，以prefix的值作为前缀, 在trim标签最前面添加指定的字符
        //• suffix：表⽰整个语句块，以suffix的值作为后缀, 在trim 标签最后面添加指定的字符
        //• prefixOverrides：表⽰整个语句块要去除掉的前缀, 去除trim标签代码块指定的字符
        //• suffixOverrides：表⽰整个语句块要去除掉的后缀, 去除trim标签代码块, 最后面的字符

        // 2) 查
        // 会根据输入的情况进行查找
        // 哪一个有值我们去查哪一个
        // 这里面用到了 where 标签, 在xml方法和注解的方法都有用到


        // 3) 改
        // 接下来看看 set 标签
        //索要的需求就是哪一个给我传值了就用哪一个
        //使用方式, 在 xml方式的 mapper 层中展示


        // 4) 删
        // 如果想要删除多个记录, 那就需要用到循环
        // mybatis 给我们提供 foreach 标签
        // 使用方式, 在 xml方式的 mapper 层中展示

        //当然 这个 foreach 标签 也可以用在多条插入当中
        // 标签有如下属性：
        //• collection：绑定⽅法参数中的集合，如 List，Set，Map或数组对象
        //• item：遍历时的每⼀个对象
        //• open：语句块开头的字符串
        //• close：语句块结束的字符串
        //• separator：每次遍历之间间隔的字符串

        // 最后一个标签
        // include 标签
        // 问题分析：
        //• 在xml映射⽂件中配置的SQL，有时可能会存在很多重复的⽚段，此时就会存在很多冗余的代码
        // 演示查询
        // 我们可以对重复的代码⽚段进⾏抽取，将其通过 <sql> 标签封装到⼀个SQL⽚段，然后再通过
        //<include> 标签进⾏引⽤。
        //• <sql> ：定义可重⽤的SQL⽚段
        //• <include> ：通过属性refid，指定包含的SQL⽚段
        // 通过 <include> 标签在原来抽取的地⽅进⾏引⽤。
        // 把一些重复的 sql 提取出来, 使用 sql 标签来表示这个语句, 自己起一个id 名字
        // 然后在使用时, 使用 include 标签 在操作中添加

        // 后面的注解方式没有过多介绍, 直接加上 script标签, 然后把xml 的语句赋值粘贴就可以了


    }

}
